<?php
/**
 * 文本分析类
 * @since 2010.4.17
 * 将导出的文本列表转换成这样的形式
 * 文本文件的第一行应该是表头
 * $list[0]['代码'] = '000001';
 * $list[0]['总量'] = '286467';
 * $list[0]['市盈(动)'] = '22.28';
 * ......
 * 
$file = new myfile('F:\Program Files\gfzqnewv7.18\T0002\export\000002.TXT',2);
$stockName = $file->file_content[0];
$lines = count($file->datas);
for($i = 0; $i < $lines;$i++){
			
}
 * */

class myfile{
	public $file_content = array(); //文件的内容
	public $filed_names = array();//第一行内容有哪些栏目
	public $datas   = array();//第二行

	/**
	 * 获取文件更新的timestamp
	 * @return 文件最后更新的unixtimestamp
	 * */
	public static  function getModifyTimestamp($file){
		return filemtime($file);
	}

	/**
	 * @param $file String 文本文件名
	 * @param $headerLine 哪行是表头,0表示第一行是表头
	 * */
	public function __construct($file,$headerLine = 0){
		$this->datas = array();
		$this->file_content = @file($file);
        if($this->file_content===false) echo "file not exists error:".iconv('gbk','utf-8',$file);
		$this->file_content = iconv_array('gb2312','utf-8',$this->file_content);
		$this->headerLine = $headerLine;
		$this->set_filed_names($this->headerLine);//设置表头
		$this->analyzeData();//分析数据
	}
	/**
	 * @return Array 分析的结果数据
	 * 
	 * */
	public function getDatas(){
		return($this->datas);
	}

	/**
	 * 分析数据
	 * */
	public function analyzeData(){
		for($i = ($this->headerLine +1 ); $i < count($this->file_content); $i++){
			preg_match_all("/(.*?)\t/",$this->file_content[$i],$value_match);
			for($j = 0; $j < count($value_match[0]); $j++){
				if(isset($this->filed_names[$j])){
					$field_name = $this->filed_names[$j];
				}else {
					$field_name = 'field'.$j;
				}
				$this->datas[$i-$this->headerLine-1][$field_name] = trim($value_match[0][$j]);
			}
		}
	}




	/**
	 * 设置表头
	 * */
	public function set_filed_names($headerLine){
		$field_names_str = $this->file_content[$headerLine];//第一行是表头
		preg_match_all("/(.*?)\s+/",$field_names_str,$field_match);
		$this->filed_names  = trim_array($field_match[0]); //将数组中所有的空白去掉
	}


	public function get_filed_names(){
		return  $this->filed_names;
	}

	/**
	 * 获得安全的文件名，不包含文件的路径
	 * */
	public static  function getSafeFileName($filePath){
		$info = pathinfo($filePath);
		return $info['basename'];
	}

	/**
	 * 读取windows文件内容的开头几行
	 * 
	 * */
	public static function getLinesFromFile($fileName,$lines=100){
		$fp = fopen($fileName,'r');
		$str = '';
		$num = 0;
		while (!feof($fp) AND $num < $lines) {
			$str .= fgets($fp,1024);
			$num++;
		}

		fclose($fp);
		return $str;
	}

}
?>